#ifndef SWITCHSTAUS_H
#define SWITCHSTAUS_H

#include <QDialog>
#include <QString>
#include "cnp.hpp"
#include <QJsonDocument>
#include <QJsonObject>
#include <QMutex>
#include <QMouseEvent>

#include"DeviceManager.h"
#include <QSharedPointer>



namespace Ui {
class SwitchStaus;
}

class SwitchStaus : public QDialog
{
    Q_OBJECT

public:
    //explicit SwitchStaus(QWidget *parent = nullptr);
    explicit SwitchStaus(const QString &Name,QWidget *parent = nullptr);
    ~SwitchStaus();



public slots:
    // 绑定节点后
    void attachToNode(QSharedPointer<DeviceNode> node);
    void pubMsg(const QString &content);
    void initSwitch();

private slots:
    // 处理“确定”按钮的槽函数
    void handleLeftButtonClick();    // 左侧按钮点击处理
    void handleRightButtonClick();   // 右侧按钮点击处理
    void slotHaltUi();
    void slotCommandUi();
    void slotReadyUi();

    void onDataReceived(const QString& content);
    void onEventReceived(const QString& content);





signals:
    // 定义一个信号，传递颜色的 QString
    void colorChanged(const QString &color);
    void upSubEvent(QString *exevent);


private:
    Ui::SwitchStaus *ui;
    void executeHaltLogic();         // 执行 halt 状态逻辑
    void executeCommandLogic();      // 执行 command 状态逻辑
    void executeOffLogic();          // 执行 off 状态逻辑
    bool m_mousePressed = false;
    QPoint m_dragPos;


    //消息通信
    void pubSwitchStatu(QString switchStatu);
    void subEvent();
    void eventStatuCallback(const QString &content);
    void parseSensorData(const QString &content);
    QString exEventMsg[2];
    CNPClient* switchPublish;
    CnpMsg msgSwitchStatu;
    QMutex mSwitchStatuMutex;//互斥鎖
    int mSwitchFlag;//0 初始值，1 halt，2 command，3 ready

    std::string mDeviceName;

    QSharedPointer<DeviceNode> m_node;
    int flagInitCount;

protected:
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;

};

#endif // SWITCHSTAUS_H
